{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Applying Functions and Plotting in Pandas\n", "
\n", "\n", "In this section, we will answer the question:\n", "\n", "**Can we use the last letter of a name to predict the sex of the baby?**\n", "\n", "Here's the Baby Names dataset once again:" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
NameSexCountYear
0MaryF92171884
1AnnaF38601884
2EmmaF25871884
3ElizabethF25491884
4MinnieF22431884
\n", "
" ], "text/plain": [ " Name Sex Count Year\n", "0 Mary F 9217 1884\n", "1 Anna F 3860 1884\n", "2 Emma F 2587 1884\n", "3 Elizabeth F 2549 1884\n", "4 Minnie F 2243 1884" ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import pandas as pd\n", "baby = pd.read_csv('babynames.csv')\n", "baby.head()\n", "# the .head() method outputs the first five rows of the DataFrame" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Breaking the Problem Down**\n", "\n", "Although there are many ways to see whether prediction is possible, we will use plotting in this section. We can decompose this question into two steps:\n", "\n", "1. Compute the last letter of each name.\n", "1. Group by the last letter and sex, aggregating on Count.\n", "1. Plot the counts for each sex and letter." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Apply\n", "
\n", "\n", "`pandas` Series contain an `.apply()` method that takes in a function and applies it to each value in the Series." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0 4\n", "1 4\n", "2 4\n", "3 9\n", "4 6\n", " ..\n", "1891889 5\n", "1891890 5\n", "1891891 5\n", "1891892 6\n", "1891893 8\n", "Name: Name, Length: 1891894, dtype: int64" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "names = baby['Name']\n", "names.apply(len)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To extract the last letter of each name, we can define our own function to pass into `.apply()`:" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0 y\n", "1 a\n", "2 a\n", "3 h\n", "4 e\n", " ..\n", "1891889 s\n", "1891890 y\n", "1891891 a\n", "1891892 e\n", "1891893 p\n", "Name: Name, Length: 1891894, dtype: object" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "def last_letter(string):\n", " return string[-1]\n", "\n", "names.apply(last_letter)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## String Manipulation\n", "
\n", "\n", "Although `.apply()` is flexible, it is often faster to use the built-in string manipulation functions in `pandas` when dealing with text data.\n", "\n", "`pandas` provides access to string manipulation functions using the `.str` attribute of Series." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0 4\n", "1 4\n", "2 4\n", "3 9\n", "4 6\n", " ..\n", "1891889 5\n", "1891890 5\n", "1891891 5\n", "1891892 6\n", "1891893 8\n", "Name: Name, Length: 1891894, dtype: int64" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "names = baby['Name']\n", "names.str.len()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can directly slice out the last letter of each name in a similar way." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0 y\n", "1 a\n", "2 a\n", "3 h\n", "4 e\n", " ..\n", "1891889 s\n", "1891890 y\n", "1891891 a\n", "1891892 e\n", "1891893 p\n", "Name: Name, Length: 1891894, dtype: object" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "names.str[-1]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We suggest looking at the docs for the full list of string methods ([link](https://pandas.pydata.org/pandas-docs/stable/text.html)).\n", "\n", "We can now add this column of last letters to our `baby` DataFrame." ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
NameSexCountYearLast
0MaryF92171884y
1AnnaF38601884a
2EmmaF25871884a
3ElizabethF25491884h
4MinnieF22431884e
..................
1891889TitusM51883s
1891890ToneyM51883y
1891891VernaM51883a
1891892WinnieM51883e
1891893WinthropM51883p
\n", "

1891894 rows × 5 columns

\n", "
" ], "text/plain": [ " Name Sex Count Year Last\n", "0 Mary F 9217 1884 y\n", "1 Anna F 3860 1884 a\n", "2 Emma F 2587 1884 a\n", "3 Elizabeth F 2549 1884 h\n", "4 Minnie F 2243 1884 e\n", "... ... .. ... ... ...\n", "1891889 Titus M 5 1883 s\n", "1891890 Toney M 5 1883 y\n", "1891891 Verna M 5 1883 a\n", "1891892 Winnie M 5 1883 e\n", "1891893 Winthrop M 5 1883 p\n", "\n", "[1891894 rows x 5 columns]" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "baby['Last'] = names.str[-1]\n", "baby" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Grouping\n", "
\n", "\n", "To compute the sex distribution for each last letter, we need to group by both Last and Sex." ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
CountYear
LastSex
aF58079486915565667
M193163053566324
bF173761092953
M14359397658923
cF302621666288
\n", "
" ], "text/plain": [ " Count Year\n", "Last Sex \n", "a F 58079486 915565667\n", " M 1931630 53566324\n", "b F 17376 1092953\n", " M 1435939 7658923\n", "c F 30262 1666288" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Shorthand for baby.groupby(['Last', 'Sex']).agg(np.sum)\n", "baby.groupby(['Last', 'Sex']).sum().head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Notice that `Year` is also summed up since each non-grouped column is passed into the aggregation function. To avoid this, we can select out the desired columns before calling `.groupby()`." ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Count
LastSex
aF58079486
M1931630
bF17376
M1435939
cF30262
\n", "
" ], "text/plain": [ " Count\n", "Last Sex \n", "a F 58079486\n", " M 1931630\n", "b F 17376\n", " M 1435939\n", "c F 30262" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# When lines get long, you can wrap the entire expression in parentheses\n", "# and insert newlines before each method call\n", "letter_dist = (\n", " baby[['Last', 'Sex', 'Count']]\n", " .groupby(['Last', 'Sex'])\n", " .sum()\n", ")\n", "letter_dist.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Plotting\n", "
\n", "\n", "`pandas` provides built-in plotting functionality for most basic plots, including bar charts, histograms, line charts, and scatterplots. To make a plot from a DataFrame, use the `.plot` attribute:" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAnEAAAJMCAYAAACVafBLAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8vihELAAAACXBIWXMAAAsTAAALEwEAmpwYAABQ0ElEQVR4nO3de7RdVX33//fXgEmQixZSiOHBqEDVEokS0YrS4KX2qVTU0hKgSG2f5nFY2gpeik9HW7w90kq1/oxao41cSgkWJQUB7UMkAtYLAaIJ3rAakQgSEIIICITv74+9TlzZrHPOPmevs9Y++7xfY5zh2WvuNdc3Z3TU6Zxrzk9kJpIkSZpeHtd2AZIkSZo4B3GSJEnTkIM4SZKkachBnCRJ0jTkIE6SJGkachAnSZI0De3SdgFN22effXLhwoVtlyFJkjSu66+//s7MnFfVNuMGcQsXLmT9+vVtlyFJkjSuiPjhaG2NLqdGxNyI+GJEzJrEvesi4paIiNK1NRFxX/H7vIj4XJ31SpIkDaqm34n7Y+Azmbl9kvffAxwBEBFPBOaPNGTmVuC2iDhirA42btnGwtMvm+TjJUmSBkPTg7gTgf8AiIh3RsSG4mdLRHyyh/tXA8uK318LfKarfU3xDEmSpKHW2DtxEfF44GmZuRkgM/8W+NuI2Au4BljRQzdrgY8Xy7HLgOXA35Ta1wPvrnj28uK7zNqz8t1ASZLUoocffphbb72VBx98sO1SWjFnzhz2339/dt11157vaXJjwz50lkN3KN5vOx/4QGZe30Mf24FrgeOAuZm5ufSKHMAdwJO7b8rMlcBKgNnzD8rJFC9JkqbOrbfeyh577MHChQvp+u/2oZeZ3HXXXdx666089alP7fm+JpdTHwDmdF07A7g1M3tZSh2xGvgQ8KmKtjnFcyRJ0jTy4IMPsvfee8+4ARxARLD33ntPeBaysUFcZt4NzIqIOQARcTTwcuAvyt+LiLURsWCMrq4B3gtcUNF2MLBprDoWLdiLzWe+ciKlS5KkBszEAdyIyfzbm97Y8J/Ai4rf30xn6fNrxeaGd0bE44ADgZ+O1kF2nJWZd1Y0HwW49VSSJE3Y7bffzrJly3j605/Os571LH7nd36H7373u7X1v27dOv7rv/6rtv6aPux3BXAacGVmHtXdGBGHAJ/OzMcsiWbm0qoOM3P30sdXAcfUU6okSWpL3ceBjbcKl5m85jWv4eSTT2b16tUAbNiwgZ/85CccfPDBtdSwbt06dt99d174whfW0l+jM3GZeSNw1WiH/Wbmpsw8bTJ9R8Q84P3Fsq0kSVLPrrrqKnbddVfe8IY37Li2ePFiXvSiF/HWt76VQw45hEWLFnHhhRcCnQHZ0UcfveO7p5xyCmeffTbQSYf6u7/7O5773OeyaNEivv3tb7N582b++Z//mQ984AMsXryYa665pu+aG4/dysxV0ElvAD4HvGSih/9GxDo6B/2OzNi9G7gEOC0iPpuZj9RXsSRJGnabNm3isMMOe8z1z3zmM2zYsIGvf/3r3HnnnTzvec/jyCOPHLe/ffbZhxtuuIGPfOQjnHXWWXziE5/gDW94A7vvvjtvectbaqm56XfiyvpNbzgxMxcXPxdl5kN0zpE7bqybTGyQJEm9uvbaazn++OOZNWsW++67L7/5m7/JddddN+59r33tawE47LDD2Lx585TU1uYgrt/0hiprMLFBkiRN0K//+q9z/fWPPbI2s/p42V122YVHH310x+fu40Fmz54NwKxZs3jkkalZIGxlEFeV3pCZi4HfBO6it/SG80sDv72La5uA501ByZIkaYi95CUv4Re/+AUf//jHd1y77rrreNKTnsSFF17I9u3b2bp1K1dffTWHH344T3nKU/jmN7/JL37xC7Zt28batWvHfcYee+zBz372s9pqbvyduEId6Q0nZub68oXM3B4RD0XEHpm5469k7JYkSRpLRHDxxRfzpje9iTPPPJM5c+awcOFC/umf/on77ruPQw89lIjgH/7hH9hvv/0A+IM/+AOe/exnc9BBB/Gc5zxn3Gf87u/+Lsceeyz/8R//wYc+9CFe/OIX91fzaNOEUykingTcmJkLS9feAeybmW8Y9cZffncd8JbuQVzRdicwPzMfrrp39vyDcv7J/+SBv5IkDZBvfetbPPOZz2y7jFZV/Q0i4vrMXFL1/VaWU2tMb9hJsay6dbQBHJjYIEmShkObGxv6Tm+ocBRweb1lSpIkDZ623omDKUhvAE4A3l5nkZIkSYOotZm4utMbih2vazLzO3XVKEmSmtPGe/qDYjL/9sYGcRExNyK+WB60ZeaqXg/7jYiMiPNKn3eJiK0R8dni0m8BT6+3akmS1IQ5c+Zw1113zciBXGZy1113MWfOnAnd1+Ryar8JDT8HDomIucUS68uBLaX2y4B3RcTfZ+b9fdYqSZIatP/++3PrrbeydevWtktpxZw5c9h///0ndE+Tg7gT6byzRjGjdlFmjiQ2nA9cmJmXjNPHFcArgYuA44ELgBcDZGYWR48cDXxqtA6M3dJ04A5qSTPNrrvuylOf+tS2y5hWGllO7U5oAD4BvL5o2wt4Ib3tKl0NLCuOJnk28NWu9vUUgzpJkqRh1tQ7cTslNGTmF4EDI+JX6cyofTozxw0Wy8xvAAuLe6oGfXfQOapkJxGxPCLWR8T67fdvm9Q/QJIkaZA0NYh7AOh+W+88OkusrwcmEnh/CXAWnaXUbnOKZ+0kM1dm5pLMXDJrt70m8ChJkqTB1MggrjuhoXA28Kai/SaAiFgQEeMlyK4C3pmZGyvaDgY29V2wJEnSgGtyY8NIQsOVAJn5k4j4FrCm9J35wJjLqpl5K/DBUZqPYpzDfhct2Iv1vjQuSZKmuSYP+10BnDzyISJ2Aw5i52XRFwAfrro5M3evuLYuM48u+tsXmDvKDJ0kSdJQaWwmLjNvjIiRhIaj6CyLvj8zt5W+s6KPRxxAJ4NVkiRp6DWanZqZq4pfr6Qz6Kqz7+vq7E+SJGmQtZKdWhXBNcH7t0fEhtLPwohYFBFn11yqJEnSQGp0Jq6k3wiuBzJzcffFiNg/Ig7IzFtGu9HEBmlwmEwhSZPXykwcnfPhRiK3zouIY0YaIuL8iHjVJPu9FFhWQ32SJEkDrfFBXE0RXHNLS6kXl64buyVJkmaENpZTHxPBFREfLiK4XktvEVyVy6mMEbsFLAeYtee8SZYtSZI0ONpYTq0zgqubsVuSJGlGaHwmLjPvjohZETEnMx8sLp8NfA24vRzBBZybmS+dQPfjxm6Z2CBJkoZBWxsbRiK4gE4EF/Atdp6FGzeCq8JRgFtPJUnS0GtrEFd7BFdEzAaWAFfUWqkkSdIAauWcuCmK4DoAOL2HTRGSJEnTXluH/dYewZWZNwM399uPJEnSdNDYcmoNUVsZEeeVPu8SEVsj4rPF56Mj4h111StJkjTImpyJ6zdq6+fAIRExNzMfAF4ObCm1Xwa8KyL+PjPvH62T0WK3jP+RJEnTSZMbG8pRW6+JiCujY35EfDci9uuhjyuAkdHW8ZQ2QmRmAuuAo+stW5IkafA0MojrjtrKzIuB24E/Az4O/F1m3t5DV6uBZRExB3g28NWu9srYrYhYHhHrI2L99vu3dTdLkiRNO03NxO0UtVX4c+DtwC8y84LH3FEhM78BLKQzC1eVr1oZu2VigyRJGjZNvRNXFbW1AHgU2DciHpeZj/bY1yXAWcBSYO+utsrYLUmSpGHTyCCuO2orInahk85wAvA64DTgrB6jtlYB2zJzY0Qs7WozdkuSJM0ITW5sKEdt/R/gmsy8hs4A7n9FxDPpIWorM2/NzA+O0mzsliRJmhGaPGJkBZ0B25WZ+c6Ri5n5M+AZABFxChOI2srMdXR2pBIR+wJzM3Nj3YVLkiQNmsYGceWordHOiptE1FbZAcCb+7hfkiRp2mhyOZXMXJWZ22tIb9geERtKPwuBB4E31VmvJEnSoGorO7Xf9IYHMnNx98WI2D8iDsjMW0a7ceMWz4mTJEnTX6MzcSV1pDdUuRRYVluVkiRJA6rxQVxN6Q1zS0upF5euVyY2SJIkDZs2llNHS2/YBHylx/SGyuVURklsiIjlwHKAWXvOm0itkiRJA6mN5dRx0xv66LsyscHYLUmSNGwaH8Rl5t3ArCLEnq70hm/ROUuOiFgQEWsn2H1PiQ2SJEnTXVu7U0fSG66klN4QERuA6yLiMuAJjJPeUMHEBkmSNCO0tTt1BXAyQGa+MzNPK37/WWY+IzO/BbyACaQ3RMRsYAlwxZRVLUmSNCBamYmbovSGA4DTM3Ois3eSJEnTTlvLqWTmqpr7uxm4uc4+JUmSBtWUL6f2G7FV6mddRNwSEVG6tiYi7it+nxcRn+u3XkmSpOmgiZm4fiO2yu4BjgCujYgnAvNHGjJza0TcFhFHZOaXRutg45ZtLDy92b0Pm898ZaPPkyRJw6+JjQ3liK2PRMSrit8vjohVxe9/EhHv7qGv1fwyVuu1wGe62tcUz5MkSRpqUzqI647YAq7ml7FYC4BnFb+/CLimhy7XAkcWS7PLgAu72itjtyJieUSsj4j12+/fNrF/hCRJ0gCa6pm47oita4AXR8SzgG8CP4mI+cBvAP/VQ3/bgWuB44C5pcHhiMrYLRMbJEnSsJnqd+J2itjKzC0R8STgt+nMyv0K8AfAfZn5sx77XA1cDJxR0VYZuyVJkjRspnQQl5l3R8SsiJiTmQ8Wl78MvAl4CbA3cFHxA0ARtfW6zNwySrfXAO8FLqho6yl2a70bDSRJ0jTXxMaGkYitEdcAu2Tm94Ab6MzGXQMQEY8DDgR+Olpn2XFWZt5Z0WzsliRJmhGaGMTtiNgCyMx/ycwnF78/nJlPyMyRXabPAj6dmY9ZEs3MpZm5vuJ6OYLrVcC/1lq9JEnSAJryQVxm3ghc1cthv5m5aSRHdaIiYh7w/sy8ezL3S5IkTSdNzMSRmasyc3vN6Q3fiYgNxc+xwDbgtIhoLUpMkiSpKU0PeOpMbzixe3m12BRxHHD+aDdt3OI5cZIkafprZCaupM70hiprMLFBkiTNAI0N4qYgveH80nLq3sW1TcDzaipZkiRpYDU5E1d3esOJmbm4+LkLoFimfSgi9ih/0dgtSZI0bJp8J24q0huqzAYeLF/IzJXASoDZ8w/KPvqWJEkaCI3NxBVHf8yKiDmlyyPpDVfTmZl7C6Wl1IhYGxELen1Gsay6NTMfHu07ixaYnSpJkqa/pjc21JreUOEo4PJ6SpUkSRpcTQ/ipjS9ATiBYtlUkiRpmDU6iJvK9IZi9+uazPxOPzVKkiRNB42nG2Tmqinq9yHg3KnoW5IkadA0eU5cX5FbEZERcV7p8y4RsTUiPlt8Pjoi3jFePyY2SJKkYdDkcmq/kVs/Bw6JiLnF55cDW0rtlwGviojd+qhRkiRpWmhyEFeO3LowIn5npCEizo6I3+uhjyuAVxa/Hw9cMNKQmQmsA46uq2BJkqRB1cggriJyazWdoPqRtpfS29Egq4FlxVlzzwa+2tW+nl9GeZWfb2KDJEkaKk3NxHVHbl0BvCQiZgP/E7i66iiRbpn5DWAhnVm4qkHfHcCTK+5bmZlLMnPJrN087FeSJE1/Te1O7Y7cejAi1gGvoDMjd8Eo91W5BDgLWArs3dU2p3iWJEnSUGtkJm6UyK3VwOvpLH9+HiAiFkTE2nG6WwW8MzM3VrQdDGwa62ZjtyRJ0jBocmNDd+TWfwJHAlcWZ7wBzAceGauTzLw1Mz84SvNRdHapSpIkDbUmD/tdAZwGXAmdmC0euxz6AuDDVTdn5u4V19bR2ZFKROwLzB1lhk6SJGmoNDaIy8wbI+KqiJg12llxmbmij0ccALy5j/slSZKmjaazU1dl5vYa0hu2R8SG0s9C4EHgTXXWK0mSNKgaz04t9Jve8EBmLu6+GBH7R8QBmXlLX9VJkiQNuEZn4krqSG+ocimwrIb6JEmSBlrjg7ia0hvmlpZSLy5dr0xskCRJGjZtLKdWpTf8f0V6w2/TW3pD5XIqoyQ2RMRyYDnAAQccMImSJUmSBksby6mPSW+gc0zISHrD6j76rkxsKMduzZs3r4/uJUmSBkPjg7ia0xu6jZvYIEmSNAza2thQS3pDBRMbJEnSjNDWIG4FcPLIh8x8ODP3zszXl74zofSG4p26JXTesZMkSRpqrZwTN0XpDQcAp2fmRGfvJEmSpp1GZuKqEhpG0ht6vP+MiMiIOLB07dTi2pLi0keBr9dbuSRJ0mBqajm134QGgI3sfJDvscA3S5/PA944bidbtvVRgiRJ0mBoahBXTmhYGhGfHWmIiBUR8Uc99LEGOKa452nANmBrqf0S4Pia6pUkSRpoUz6Iq0homKx7gR9FxCF0BmsXlhuLo0tmR8TefT5HkiRp4DUxE9ed0NCP1XSWVF8NXFzRPmpiQ0Ssj4j12+93OVWSJE1/TQzidkpooHP2W/m5c+jdpcBJwC2ZeW9F+7iJDbN222sCj5MkSRpMUz6Iq0ho+CHwrIiYHRF70Qm8ByAi3hsRrxmjrweAvwLe090WEQHsB2yusXxJkqSB1NTGhh0JDZn5I+BTwDeA84EbS99bBNw+VkeZuTozb6hoOgz4ynjnxC1a4EycJEma/po67HcFcBpwJUBmvg14W8X3ds3ML3dfzMwzqjrNzKWljycBH+m3UEmSpOmgkZm4zLwRuKp82O8o33tFH4/ZlJlr+7hfkiRp2mgsdiszV01x/x+fyv4lSZIGSVPvxO1QFcE1wfvPiIgtEbGh+DmzuL46Ig6qt1pJkqTB1NhMXEkdEVwfyMyzuq59lM57dn861o3GbkmSpGHQ+Ewc9URwVbkGeFlEtDEwlSRJalSjg7gaI7hOLS2nvgIgMx8FvgccWvFcExskSdJQaXomrq4Irg9k5uLi5/Ol65WxWyY2SJKkYdP0IK7OCK4qlbFbkiRJw6bRQVydEVyjOBi4aawvmNggSZKGQRsbG2qL4CqLiH2BBzLztvpKlSRJGkxt7OSckggu4ATgYzXVKEmSNNAan4mbwgiue4BzJluXJEnSdNJKYgNwcvH7wog4ocf7MiLOK33eJSK2ls6Z2wr8Te0FS5IkDaBWExsiYiGdZdB/6+G+nwOHRMTczHwAeDmwpdR+GfCuiPj7zLx/tE42btnGwtMvm3z1GtXmM1/ZdgmSJM0YrSY2AGcCLy4O7T21h3uvAEZGCscDF4w0ZGYC64Cj6ytVkiRpMLWd2HA6cE1xaO8HeuhiNbCsOKLk2cBXu9rXAy+uq15JkqRBNa0SGzLzG8BCOrNwl1d8pTKxwdgtSZI0bNpObJiMS4CzKC2lllQmNhi7JUmShk2jGxsy8+6ImBURczLzQeBnwB4j7RGxADg3M186aiewCtiWmRsjYmlX28HAprFqWLRgL9b7Ar4kSZrmWk1soJPU8EhEfL3Y2DCfTp7qqDLz1sz84CjNR9HZpSpJkjTUWk1syMyH2Tkv9RTgw1U3ZebuFdfW0dmROhK7NTczN9ZfsiRJ0mBpfBCXmTdGxFURMSszt3e1reij6wOAN/dXnSRJ0vTQxkwcmblqCvq8ru4+JUmSBlUb78TtEBFzI+KLxWaHiURwbS8OCB75WRgRiyLi7CkuWZIkaSC0MhNXMtkIrgcyc3H3xYjYPyIOyMxbRrtxKmO3jJ2SJElNaXUmjv4iuKpcCiyrpTJJkqQB1togrs8IrrmlpdSLS9crY7dMbJAkScOmzeXUfiK4KpdTGSV2KzNXAisBZs8/KCf5TEmSpIHR5nJqHRFc3SpjtyRJkoZNazNxNUVwdTN2S5IkzQhtb2zoK4KrgrFbkiRpRmh7ELcCOBkgMx/OzJdm5qHFxoYXMIEIroiYDSwBrpjCeiVJkgZCq+fE1RzBdQBwemZOdPZOkiRp2ml0Jq6c0DByLTNXdQ/gRrn37Ii4PyLK7819MCIyIvYBfgi8MyLaPsBYkiRpyjU94NmR0DDJ+78HHAP8a0Q8js47cFsAMvOhiFgLHAecP1oHU5nYII3FRA9JUp2afiduR0JDRMyPiKuLA3s3RcRjDumtcAGdQRrAUuBL7Lz5YU3xDEmSpKHW2CCuIqHhBODzxaG9hwIbeujmZmBeRDwJOB5Y3dW+CXheHfVKkiQNsiZn4roTGq4DXh8RZwCLMvNnPfbzGTr5qM8Hrik3FMu0D5XfmwNjtyRJ0vBpchC3U0JDZl4NHEnnnbbzIuJ1PfazGngX8P8y89GK9tnAg+ULmbkyM5dk5pJZu+01qeIlSZIGSWMbG7oTGiLiKcCWzPx4RDwBeC5wbkScC6zIzK+N0s8tEfHXwJXdbRGxN7A1Mx8erQ4TGyRJ0jBoenfqSELDlXQ2Jrw1Ih4G7gNGZuKeDdw2VieZ+bFRmo4CLq+lUkmSpAHW9CBuBXAacGVmngOcU26MiD2BmzPzR903ZuYfVXWYmQtLH08A3l5XsZIkSYOq0SNGMvNG4KryYb9d7fdm5u9Ppu9i9+uazPxOPzVKkiRNB42nG2Tmqinq9yHg3KnoW5IkadA0fdgvUB2/NYF7z46IHxSHBG+IiL8orl9ZnB8nSZI09NrKGe03fuutmXlR17XzgDcC7xnrxkGJ3TKCSZIk9aOVmTj6j9+qcgmdFAdJkqSh1/ggrqb4rfeVllMXQeccOmB2cVZc9zNNbJAkSUOljeXUqvitVRGxK53dpRt66KNqORXgDuDJwF3li5m5ElgJMHv+QTmJmiVJkgZKG8updcVvVZlT9C9JkjTU2jhipJb4rW4REcB+wOaxvmfsliRJGgZtbWwYid+CTvzWhoi4Efg94IPF9XHjt7ocBnwlMx+pq0hJkqRB1dYRI7XHbwEnAR+puU5JkqSB1MpM3BTFb23KzLX9VydJkjT42jhiZG5EfBE4ZyKH/UbEuoi4pXj3beTamoi4r/i4JiI+V3e9kiRJg6iN5dTKtIaImNXDoO4e4Ajg2oh4IjB/pCEzt0bEbRFxRGZ+abQOBiWxYSYypUKSpPq0sZxaTmtYGhFXRcS/ARt7uHc1sKz4/bXAZ7ra1xT9S5IkDbVGB3EVaQ0AhwN/nZnP6qGLtcCRxbt0y4ALu9rXA5ON7ZIkSZo2mp6J605rAPhaZv6gx/u3A9cCxwFzuwaD8MvEhp0YuyVJkoZN04O4ndIaCj+fYB+rgQ8Bn6poq0xsyMyVmbkkM5fM2m2vCT5OkiRp8DS6saE7raHqOxGxFnhdZm4ZpZtrgPcCF1S0HQxsGqsGExskSdIwaGNjQzmtYScR8TjgQOCno92cHWdl5p0VzUcBbj2VJElDr41B3ArgZIDMXJeZR5fangV8OjOrlkSXZub6iuu7lz6+CvjXmuuVJEkaOI0P4sZKa8jMTZl52mT6jYh5wPsz8+5+a5QkSRp0rWSnZuaqKehzK51z4iRJkoZeK9mpI0YiuEbLUB3jvnUR8Z2I2FD8HBsRj4+IqyOilYGpJElSk9oe8PQTwXVi9ztyxc7W44DzR7tpEGO3jKOSJEkT1epMHP1FcFVZg7FbkiRpBmhtJm6MCK5DekxwOD8iRnaxvjQz76JzRtzzKp61HFgOMGvPeX3VLUmSNAjaXE7tN4LrMcupmbk9Ih6KiD0y82el6yuBlQCz5x+UfdQsSZI0ENpcTq0jgqvKbKAyDUKSJGlYtDYTV1MEV/f39wa2ZubDo33H2C1JkjQM2t7Y0FcEV4WjgMtrqEuSJGmgtT2IqzWCCziB4t03SZKkYdbqIK7OCK5it+uazPxOnTVKkiQNokYGcWMlM2TmqvEO9o2IMyIiI+LA0rVTi2tLikuXA5fWW7kkSdJgamomrjKZYYI2AstKn48Fvln6fB7wxnE72bKtjxIkSZIGQ1ODuHIyQ0TEioj4ZkRcFhGXR8SxPfSxBjim6ONpwDZga6n9EuD4esuWJEkaTFM+iKtIZngN8GvAIuBPgRf22NW9wI8i4hA6g7ULy42ZeTcwuzhmRJIkaag1MRPXncxwJHBBZm7PzB8DX5hAX6vpLKm+Gri4ov0O4MndFyNieUSsj4j12+93OVWSJE1/TQziqpIZJht9dSlwEnBLZt5b0T6neN7OD8tcmZlLMnPJrN32muSjJUmSBseUD+KKZc5ZETEykLsaWFakNcync0AvABHx3oh4zRh9PQD8FfCe7raICGA/YPNY9Sxa4CBOkiRNf01tbCgnM1wM3Exnt+lHgS+WvrcIuH2sjjJzdWbeUNF0GPCVzHyk/3IlSZIGW1PZqSuA04ArMzOBU0YaIuLs0vd2zcwvd9+cmWdUdZqZS0sfTwI+UkOtkiRJA6+Rmbixkhm6vveKPh6zKTPX9nG/JEnStNFY7NZIMkN3ekNm/lFmXtRrP0V6w5aI2FD8nFk0vTQiDpqS4iVJkgZMU8upZXWkN3wgM8/quvZR4G10zp6TJEkaao3NxJXUkd5Q5RrgZRHRxsBUkiSpUY0O4mpMbzi1tJz6CoDMfBT4HnBovVVLkiQNnqZn4upKb/hAZi4ufj5fuj5uYsPWrVu7myVJkqadpgdxdaY3VBk3sWHevHk1Pk6SJKkdjQ7i6kxvGMXBwE31VCtJkjS42tjYUFt6Q1lE7As8kJm31VSnJEnSwGpjJ+eUpDcAJwAfq69MSZKkwdX4TNwUpjfcA5wz2bokSZKmk1bOVMvMVaNc/6M++vzkpAuSJEmaZhqbieuO25rE/WdHxP0RsUfp2gcjIiNin4h4fERc7WG/kiRpJmhywFNH3Nb3gGOAf42Ix9HZzboFIDMfioi1wHHA+aN1sHHLNhaeflll2+YzX9lHaZIkSc1p8p24ctzW0mLW7OIicuufi0HZeC6gM0gDWAp8CXik1L6meI4kSdJQa2QQVxG3BXA48GY6R4k8HXhtD13dDMyLiCcBxwOru9o3Ac/ru2BJkqQB19RMXHfcFsDXMvP7xfLqBfzy7LjxfAZYBjyfTuj9DkVfD5Xfm4OdY7e2379tMvVLkiQNlKbeieslbqvX+K3VwA3AOZn5aER0t88GHtyp48yVwEqA2fMPqjPmS5IkqRWNDOIy8+4iWmtOZo4MsA6PiKcCP6TznttKgIg4F1iRmV8bpa9bIuKvgSu72yJib2BrZj48Wi2LFuzFejcwSJKkaa7JjQ3luC2ALwNn0nmP7Qd0IrgAng2MGZ2VmR/LzP+uaDoKuLz/UiVJkgZbk0eM7IjbKj7fn5nHlb8QEXsCN2fmj7pvHu0g4MxcWPp4AvD2OoqVJEkaZI3NxPUSt5WZ92bm70+m/2IH7JrM/M5ka5QkSZouGs1OLeK2Hg+8g86hvRNWJDf8ICI2FD9/UTRdDlxaU6mSJEkDrY2IqjqSG96amRd1XTsPeCPwnj76lSRJmhYanYkr1JHcUOUSOgcAS5IkDb1GB3E1Jje8r7Scugg6x5gAs4tjRiRJkoZa0zNxdSU3vDUzFxc/G0vX7wCe3P3lcmLD1q1bJ1u7JEnSwGh6EFdnckOVOcUzdu4wc2VmLsnMJfPmzeuje0mSpMHQ9O7Uu4FZEVEeyB0eEU8t3oU7DrgWOskNEXF4r31HJ39rP2BzjSVLkiQNpDY2NtSW3NDlMOArmflIHUVKkiQNsjaOGJmS5AbgJOAjNdYpSZI0sBqfiZvC5IZNmbm2v+okSZKmhzZm4kaSGwDWFT919PnxOvqRJEmaDhqbiYuIuRHxxbFm4Ma5f3NEXNN1bUNEbCp+XxQRZ9dQqiRJ0sBrciaujritPSLif2TmjyLimeWGzNwYEftHxAGZectoHWzcso2Fp1/WRwlTa/OZr2y7BEmSNA00+U5cOW4rIuJ9EbEpIjZGxHHj3DviU3SOIYFOxNYFXe2XAstqqVaSJGmANTKIq4jbei2wGDgUeBmdGK35PXR1Eb+M5fpdOoO2svXAiyuevyOxYfv92yb+D5AkSRowTc3EdcdtvQi4IDO3Z+ZPgC8Cz+uhn58Cd0fEMuBbwP1d7ZWxW+XEhlm77TWZ+iVJkgZKU4O47rit6KOvC4EP89ilVBgldkuSJGnYNLKxITPvjohZETEnMx8Ergb+d0ScA/wKcCTwVoCI+HZmPmOM7i4G5gOf57GzbgfTSX4Y1aIFe7HezQOSJGmaa3JjQzlu62LgG8DXgS8Ab8vM2yNiH8aZpcvMn2Xm32fmQxXNRwGDu/VUkiSpJk0O4lYAJwNkx1sz85DMXJSZFxbfeQGdpdLHyMyFmXln17XNmXkIQETMBpYAV0zZv0CSJGlANHZOXGbeGBFXRcSs0c6Ky8zP9vGIA4DTM/ORPvqQJEmaFhrNTs3MVZm5vab0ho1FYsOGiHghnd2vp9dasCRJ0oBqJTuVetIbjupeXo2I2yLiiMz80mg3dSc2mJAgSZKmo0Zn4krqSG+osqboW5Ikaag1PhM3TnrDPsB1EXF1Zt42TldXRcR24BeZ+fzi2nrg3fVXLUmSNFjaWE4dNb0B+ElEjKQ3XDJOP49ZTmWUxIaIWA4sB5i157xJli1JkjQ42lhOrTO9oVtlYoOxW5Ikadg0PhNXc3pDNxMbJEnSjNDWxoZa0hsqmNggSZJmhLaOGFkBnAZcmZlJZ+btrV3fGTO9YZR+XwUcU1ONkiRJA6uVQdxUpDdExDzg/Zl5dy1FSpIkDbC2ZuLIzFU197eVzjlxkiRJQ6+nd+Ii4mUV107u9SE1xGydEREZEQeWrp1aXFtSfL4yIp40mf4lSZKmm15n4v42In4PeAuwO/AJ4BfAOT3eX0fM1kZgGb88zPdY4Jul9vOANwLvGbOTrtgtSdLUMdpQmjq97k79TeC/gQ3AtcC/ZeaxE3hOOWZraUSsi4iLIuLbEXF+RPSyC3UNxaaFiHgasA3YWmq/BDh+AjVJkiRNW70O4p4EPJ/OQO4XwFN6HHhVxWwBPAd4E/As4GnAET10dS/wo4g4hM5g7cJyY7GhYXZE7F1Rw/KIWB8R67ffv62XsiVJkgZar4O4rwBXZOZv04nEejLwpR7v7Y7ZAvhaZt6amY/Smd1b2GNfq+ksqb6azvly3Spjt0xskCRJw6bXd+Jelpm3AGTmA8BfRMSRPd7bHbMFndm8EdsnUMelwPuA9Zl5b8VkYGXsliRJ0rDpdfB0Z0T8DXBAZv5pRBwE7NnLjRUxW6OKiPfSmaWrmmUjMx+IiL8CvltxbwD7AZvHeoaxW5IkaRj0upz6STqzZ79RfL6VX+4S7UU5Zmssi4Dbx/pCZq7OzBsqmg4DvpKZj0ygLkmSpGmp15m4p2fmcRFxPOyYEZtIrmk5ZmsdsG6kITNPKX1v18z8cvfNmXlGVaeZubT08STgIxOoSZIkadrqdSbuoYiYCyRARDydnd9rG1Nm3ghcNd5hv5n5il77rLApM9f2cb8kSdK00esg7u+AzwH/IyLOB9YCb5vIgzJzVWZurym9YUtEbCh+ziyaXlq8qydJkjT0IjN7+2Ln/LUXAEHn3bM7J/XAiD8DdsnMD07y/jOA+zLzrK7rvwn8YWb+6Vj3z55/UM4/+Z8m82hpWvCEfEkaHhFxfWYuqWobcyYuIp4SEXsBZOZdwP3Ay4HXFYf4TkYd6Q1VrgFeFhG9vucnSZI0bY23nPop4AkAEbEY+HfgFuBQJrGJoMb0hlNLy6mvACgODv5eUZskSdJQG2/Wam5m/rj4/Q+BVZn5jxHxODpJCxM1anoDQERsoJPecO04/Xygezm1MJLYcH35YkQsB5YDzNpz3kRrliRJGjjjzcSVlzZfQmdDw8is12TUmd5QpTKxwdgtSZI0bMYbMH0hIj4F3AY8CfgCQETMBx6a6MPqTG8YxcHATWN9wcQGSZI0DMabiXsT8Bk6UVYvysyHi+v7AX89yWfWlt5QFhH7Ag9k5m2TrEuSJGnaGHMmLjvnj6yuuH5jH8+ckvQG4ATgY33UJUmSNG30etjvTiLiyoi4IiKOnui9U5jecA9wzkTrkSRJmo4mu4ngdcB8Oof/Tlhmrprkc8fq85N19ylJkjSoepqJi4i/LH8ujh15UWZ+eIx7+orX6upraURkRPxJ6dpzimtvKT6fFREv6fdZkiRJ00GvM3EnA90xWX9Uca3sj4HPZOb2SdRVZSNwHPAvxedlwNdL7R8CPk6xg3bUTrZsY+Hpl9VU0uAwakmSpJllzEFcRBxPZ8PAUyPiklLTnsBd4/R9YnEvEbEUeAfwE2AxnR2vG4G/BOYCr87M/x6nv1uAPYtdqHcAvw1cPtKYmT+MiL0jYr/M7HlXqyRJ0nQ03kzcf9E5I24f4B9L138GfGO0m0aJ1zoUeCbwU+D7wCcy8/BiqfbP6RxnMp6LgN8HbgRuYOeDgimuHQF8uqseExskSdJQGe+IkR8CP4yIl9E5g+3RiDgYeAadmbTRVMVrXTdyhltE/Ded8+Io+jmqx3o/BVxYPP8C4IVd7SOxW93/jpXASoDZ8w/KHp8lSZI0sHo9YuRqYE5ELKATvfV64Owxvj9evNajpc+P0uO7ecUy6cPAy4s6ulXGbkmSJA2bXjc2RGbeX+wO/VBm/kNEjHrg70TitXZ6SMRrgMMz8+1jfO1vgV/NzO0R0d12MPDvYz3D2C1JkjQMep2Ji4j4DTqbFUa2do43AOw1Xqvs6cC9Y30hM/8rM9dUFLgrcCCwfoLPlCRJmnZ6nYn7S+DtwMWZeVNEPA24apx7xorXWlr6vdy2GDi1u6Pu+0vXzyh9PBq4KDMfGacuSZKkaa/Xd9GupvNe3Mjn7wN/Mc49N0bEVRExq9ez4jLzD3v53ih2YecdtJIkSUOr18SGeRHxvoi4PCK+MPIz3n2Zuap4d63u9IZtEbGh+LmyaNoXeE2//UuSJE0HvS6nnk/naI+jgTfQSXDYOoHn1J3ecE1mHt11bRXwJWDMDNXuxAaTDiRJ0nTU68aGvTPzX4CHM/OLmfnHwAsm8JwTgf+AHTNpX4yIT0XEdyPizIg4MSK+FhEbI+LpE/w3AJCZ9wObI+LwydwvSZI0nfQ6iHu4+M/bIuKVEfEcYP9ebhwjveEvgUXAScDBmXk48Ak66Q3jeXFpOfWvS9fXAy/upS5JkqTprNfl1HdHxF7Am+kEze9JbzFZMDXpDVXLqdBJbHhG90VjtyRJ0rDpaSYuMz+bmdsyc1NmHpWZh9E5060XU5LeMIrKxIbMXJmZSzJzyazd9uqje0mSpMHQz4DpNOCfxvvSFKc3dDuYzuaGUZnYIEmShkGv78RVeUzm1RimJL2hwhHAleN+S5IkaZrrZxCXE/juCjrHkpCZ68rvs2Xm0sxcX9G2mM5Gh50f2nX/iGKzxU2ZeecE6pIkSZqWxlxOjYifUT1YC2Burw9pKL1hH+BvJniPJEnStDTmIC4z96jrQZm5qq6+Run//01l/5IkSYOkn+XUSSvHcEXEwojY1MM9GRHnlT7vEhFbI+KzxeejI+IdU1m3JEnSoOhnd2o/dsRwRfS8P+LnwCERMTczHwBeDmwptV8GvCsi/r5Ib6jUHbslVTGOTZI06FqZiaMUwzVBVwAj/+16PHDBSENmJrCOTr6rJEnSUGt8EDdKDFevVgPLImIO8Gzgq13tlbFbEbE8ItZHxPrt92+bxGMlSZIGSxszcVUxXD3JzG8AC+nMwl1e8ZU7gCdX3GdigyRJGiptvBNXFcM1EZcAZwFLgb272ipjtyRJkoZN44O4sWK4ImIBcG5mvnSMLlYB2zJzY0Qs7Wo7GBhzp6uxW5IkaRi0tbFhtBiu+cAjY92Ymbdm5gdHaT6Kzi5VSZKkodbWIK4cw7U5Mw8prr8A+HDVDZm5e8W1HRFcEbEvMDczN05NyZIkSYOjlXPiRovhyswVfXR7APDm/quTJEkafG3NxJGZq4rDfieT3rA9IjaUfhYCDwJvmuq6JUmSBkFbiQ1lk0lveCAzF3dfjIj9I+KAzLxltBuHNbHBhAFJkmaW1mbiSiab3lDlUmBZTX1JkiQNrFYHcX2kN8wtLaVeXLpemdggSZI0bNpeTp1sekPlciqjJDZExHJgOcCsPedN4nGSJEmDpe3l1H7TG7pVJjYYuyVJkoZNqzNxNaQ3dDOxQZIkzQhtz8RBH+kNFUxskCRJM8IgDOJqSW+IiNnAEuCKKapTkiRpYLS9saHO9IYDgNMzc6Kzd5IkSdNO64M46KQ31NDHzcDNNZQjSZI08BobxEXEXOBzwEvonOX2lpHw+h7uXQj8AHh3Zv5NcW0f4DbgY5l5SkScAvw8Mz85Vl/DkthgQoMkSTNbk+/E7YjXmuT93wfKg77fB24qfV4F/MUk+5YkSZpWmhzEVcZrRcTzIuLGiHjaOPc/AHwrIpYUn48DPjXSmJn3A5sj4vC6CpYkSRpUjQziRovXiogXAv8MHJOZ3++hq9XAsojYH9gO/LirvTJ2KyKWR8T6iFi//f5tk/knSJIkDZSmZuKq4rWeCawEfjczb+mxn88BLweOBy6saK+M3TKxQZIkDZumBnFV8Vq3AQ8Cz+m1k8x8CLgeeDPw6YqvVMZuSZIkDZtGdqeOEq91D/AnwH9GxM8zc13xPtspmfm6Mbr7R+CLmXlXRHS3HQx8aaxajN2SJEnDoMmNDY+J18rMnwC/C3w4Ip5P58DeMWfSMvOmzDxnlOYjgCtrqFWSJGmgNTmIK8drrRs5Iy4zb8nMX8/MrwLPpyJqqyuOq3z97Mw8BSAingPclJl3TuU/QpIkaRA0dtjvaPFaXd95ax+P2Af4mz7ulyRJmjaanIkjM1dl5vaImBsRXyzek1saEZ/ttY+IWBgRD0TEhtLP44HZwOunrnpJkqTB0eggrqTf9Ib/zszFpZ+HgMuAV0XEbmPduHGL58RJkqTpr61BXL/pDY+RmQmsY+doLkmSpKHU+CCupvSGp5eWUssbIUxskCRJM0JjGxtKxkpv+K3M7I7SqvLfmbm44vqoiQ1F/8yef1BOpFhJkqRB1MZyai3pDaMwsUGSJM0IjQ/iMvNuYFZElAdy9wCvBP5vRCwFiIjDI+LcCXZ/MLBprC8sWmB2qiRJmv7a2thQS3pDhaPo7FKVJEkaam0N4mpPb4iIfYG5mblxakuXJElqXxsbG6YqveEA4M39VydJkjT4WpmJi4i5FDNxEfHkiLioh3syIs4rfd4lIraW0h72BV4zJQVLkiQNmNYTGzLzx5l5bA/3/Bw4pBgAArwc2FJqN7FBkiTNGK0nNhRZqGPuKC25gs4uVoDjgQtGGkxskCRJM8nAJDb0aDWwrDie5NnAV7vaKxMbJEmShk0bM3FViQ09ycxvAAvpzMJdXvGVysQGY7ckSdKwGZTEhom4BDiL0lJqSWViQ2auzMwlmblk1m4e9itJkqa/QUlsACAiFkTE2nG6WAW8c5Tz4MZNbJAkSRoGg5LYMBJKPx94ZKwbM/PWzPzgKM3jJjYYuyVJkoZB64kNwN7AT4vfX0BFSgNAZu5ecW1H2oOJDZIkaSZpO7Hh+cB5wOnF9RV9dGtigyRJmjHamokjM1cVGamHAn8ZEbMmkN6wPSI2lH4WAg8Cb5raqiVJkgZDKzNxXXakNwA/BnpJb3ggMxd3X4yI/SPigMy8peYaJUmSBkprM3Elk01vqHIpsKyWqiRJkgZYq4O4PtIb5paWUi8uXTexQZIkzQhtL6dONr2hcjmVMRIbgOUABxxwwCQeJ0mSNFjaXk7tN72h27iJDfPmzavxcZIkSe1odRBXQ3pDNxMbJEnSjND2TBz0kd5QYdzEBkmSpGEwCIO4WtIbImI2sAS4YgpqlCRJGihtb2yoM73hAOD0zJzo7J0kSdK00/ogDjrpDcWvB/fRx83AzfVUJEmSNNhaWU6NiLkR8cUJRm1lRJxX+rxLRGyNiM8Wn4+OiHdMZd2SJEmDoq2ZuMlEbf0cOCQi5mbmA8DLgS2l9suAd0XE32fm/aN1snHLNhaePvbeh81nvrKHciRJktrT1saGyUZtXQGMjLCOBy4YacjMBNYBR9dXpiRJ0mBqfBDXR9QWwGpgWXGu3LOBr3a1G7slSZJmhDZm4iYbtUVmfgNYSGcW7vKKr4wauxUR6yNi/fb7t03m0ZIkSQOljUFcv1FblwBnUVpKLRk3dmvWbnv18WhJkqTB0PjGhsy8u9iVOiczHyy3RcQC4NzMfOkYXawCtmXmxohY2tU2buzWogV7sd6NC5IkaZpra2NDd9TWiHGjtjLz1sz84CjNxm5JkqQZoa1B3I6orczcnJmHFNcnFLWVmesy82iAiNgXmJuZG6emZEmSpMHRyjlxpaitWcVZcSPXJxq1VXYA8Ob+q5MkSRp8rcVulaK26urvujr7kyRJGmRtLafuMMkIru0RsaH0szAiFkXE2Q2ULEmS1LrWZuJKJhPB9UBmLu6+GBH7R8QBmXnLaDf2ErvVJCO+JEnSZLQ+E8fkI7iqXAosq6UqSZKkAdbqIK6PCK65paXUi0vXK2O3TGyQJEnDpu3l1MlGcFUupzJK7FZmrgRWAsyef1BO4nmSJEkDpe3l1H4juLpVxm5JkiQNm1Zn4mqI4Opm7JYkSZoR2p6Jgz4iuCoYuyVJkmaEQRjE1RLBFRGzgSXAFVNUpyRJ0sBoe2NDnRFcBwCnZ+ZEZ+8kSZKmnUZm4rpSGZZGxGfL7Zm5qjyAq7j/jIjIiDiwdO3U4tqS4tJHga9Pzb9AkiRpsDQ1E7cjlSEiJtvHRjoH+b67+Hws8M1S+3nAG4H3jNnJgCU2NM2ECEmShkNT78TtSGUo7B4RF0XEtyPi/OhtZLcGOAYgIp4GbAO2ltovAY6vqV5JkqSBNuWDuFFSGZ4DvAl4FvA04IgeuroX+FFEHEJnsHZhuTEz7wZmR8TeNZQtSZI00JqYiatKZfhaZt6amY8CG4CFPfa1ms6S6quBiyvaKxMbjN2SJEnDpolBXFUqwy9Kv2+n93fzLgVOAm7JzHsr2isTGzJzZWYuycwls3bbq8dHSZIkDa4p39gwVipDt4h4L51ZuqpZNjLzgYj4K+C7FfcGsB+weaxnmNggSZKGQVMbG0ZLZei2CLh9rC9k5urMvKGi6TDgK54TJ0mSZoKmjhhZAZwGXJmZ64B1Iw2ZeUrpe7tm5pe7b87MM6o6zcylpY8nAR/pv1RJkqTB18hMXGbeCFwVEbPG+d4r+njMpsxc28f9kiRJ00ZjsVuZuWqK+//4VPYvSZI0SJp6J26H8SK4erj/jIjYEhEbip8zi+urI+KgqalakiRpsDQ2E1dSRwTXBzLzrK5rHwXeBvzpWDfO9NitiTCiS5KkwdX4TBz1RHBVuQZ4WUS0MTCVJElqVKODuBojuE4tLae+AqBIf/gecGjFc01skCRJQ6Xpmbi6Irg+kJmLi5/Pl65Xxm6Z2CBJkoZN04O4OiO4qlTGbkmSJA2bRt8fqzOCaxQHAzeN9QVjtyRJ0jBoY2NDbRFcZRGxL/BAZt422cIkSZKmizZ2ck5JBBdwAvCx2qqUJEkaYI3PxE1hBNc9wDmTrUuSJGk6aWQQV05pgE4EV2Zun8D9Z0RERsSBpWunFteWFJdOBPaot3JJkqTB1NRy6o6Uhj762AgsA95dfD4W+Gap/TzgjcB7xuxklMQG0wkkSdJ00tRy6o6Uhoh4XER8JCJuiojPRsTlEXFsD32sAY4p+ngasA3YWmq/BDi+3rIlSZIG05QP4ipSGl5L50DfRcD/An6jx67uBX4UEYfQGaxdWG7MzLuB2RGxdw1lS5IkDbQmZuK6UxpeBPx7Zj6ambcDV02gr9V0llRfDVSdH1eZ2GDsliRJGjZNDOK6UxomG3APcClwEnBLZt5b0V6Z2GDsliRJGjZTvrGhIqXhWuDkiDgHmAcsBf4Nxk9pyMwHIuKvgO92t0VEAPsBm8eqx8QGSZI0DJra2FBOafg0cCuwic7hvF+ls0kBekhpyMzVmXlDRdNhwFcy85FaKpYkSRpgTR0xUk5peDQi3pKZ9xWbEL5G5/gQmGBKQ2YuLX08CfhIrVVLkiQNqEYGcZl5Y0RcFRGzirPiPhsRTwQeD7yr2OAwmZSGsk2ZubaGciVJkgZeY9mpmbkKOukNdDY3HDaZw38j4gzgT/nlGXGfy8zTgZdGxLrMvLmmkiVJkgZWY4O4kjrSGz6QmWd1Xfso8DY6AzxJkqSh1tTGhrI60huqXAO8LCLGHJhu3OI5cZIkafprdBBXY3rDqRGxofh5BUBmPgp8Dzi01qIlSZIGUNPLqaOmNwC3R0Sv6Q1Vy6nwy8SG68sXI2I5sBxg1p7zJlqzJEnSwGl6ObXO9IYqJjZIkqQZodFBXBFSPysiRgZy1wK/V7wbty+d9Aagk94QEa+Z4CMOBm6qpVhJkqQB1sbGhtrSG8qKQeADmXnbWN9btMCZOEmSNP21ccTIlKQ3ACfQGQhKkiQNvcYHcVOY3nAPcF6txUqSJA2oNmbidqQ3FL8vranPT9bRjyRJ0nTQ+DtxETE3Ir4YEbOKz+8rDvt93xj3LI2IjIg/KV17TnHtLcXnsyLiJVP/L5AkSWpfGxsbumO3/jfw3Mx86zj3bQSOK31eBny99PlDwOnjPXzjlm0sPP2yCZQrSZI0eNqO3boEeALw1Yg4bsy74BZgTkTsGxEB/DZwxUhjZv4Q2Dsi9puasiVJkgZHo+/EdcduZearIuK+zFzcYxcXAb8P3AjcAPyiq/0G4Ag6R5dIkiQNraZn4rpjtybqU3QGcccDF1S0j8Ru7SQilkfE+ohYv/3+bRW3SZIkTS9tx25NSHH8yMPAy4G1FV8xdkuSJM0Ibcdu7SQiXhMR7x2nm78F/qq0MaLsYDrpD6NatGAvNp/5yp7qlSRJGlRtnBM3Ert1ZUXb04F7x7o5M/+r6npE7AocCKzvt0BJkqRB12rsFkBm7l5qWwyc2n1DZq4D1lVcP6P08Wjgosx8pLZKJUmSBtQgxG6V2/6wj653Af6xv+okSZKmh9Zjt2rs89/r7lOSJGlQtXHY7w59RHBti4gNxc+VxfVTIuL1TdUuSZLUplZm4kqqIrjmZWb3Ib7drsnMo7uurQK+BHyy5holSZIGTqszcUw+gusxMvN+YHNEHF5viZIkSYOntUFcVQQX8EBmLs7MC8e5/cWl5dS/Ll1fD7y44lk7Ehu2bt1a1z9BkiSpNW0up/YTwVW1nAqd2K1ndF/MzJXASoAlS5bkJJ8pSZI0MNpcTu0rgmsUlbFbkiRJw6a1QVxNEVzdxo3dkiRJGgZtb2wYieCqMm4EV4UjqI7zkiRJGiptD+JWACePfKiI4PpE9w2Zua7qfbiIeA5wU2beOQV1SpIkDZRWz4mrOYJrH+Bv6qtOkiRpcDU2E9edzjAiM1d1D+BGuX9dRNwSEVG6tiYi7is+bgD+udaiJUmSBlSTM3Hd6QyTcQ+d996ujYgnAvNHGjJza0TcFhFHZOaXRutg45ZtLDz9sj5K0LDafOYr2y5BkqSeNflO3I50BoCIeGtEXBcR34iId/TYx2pgWfH7a4HPdLWvKZ4jSZI01BoZxHWnM0TEbwEHAYfT2cBwWEQc2UNXa4EjiyXZZUB3ssO4iQ3b79826X+HJEnSoGhqJq47neG3ip8bgRvopCwc1EM/24FrgeOAuSODwpI7gCd335SZKzNzSWYumbXbXhMuXpIkadA09U5cdzpDAO/NzI9Noq/VwMXAGRVtJjZIkqQZoZFBXGbeHRGzImJOZj4IfB54V0Scn5n3RcQC4OHMvCMi1gKvy8wto3R3DfBe4IKKtnETGxYt2Iv1vsAuSZKmuSZ3p46kM1yZmf8ZEc8EvlycGHIf8IcRcSdwIPDT0TrJzATOGqX5KMCtp5Ikaeg1OYhbAZxGEYuVmR8EPlj+QkQcAnw6Mx+zJJqZS6s67Up5eBVwTE31SpIkDazGjhjJzBuBq7oP++36zqbMPG0y/UfEPOD9mXn3ZGuUJEmaLhrNTh1JZxgtvaFXRXrDdyJiQ/FzLLANOC0iWo0SkyRJakJbA5460htOzMz15QvFpojjgPNHu8nEBkmqn4knUvManYkrqSO9ocoaTGyQJEkzQOODuBrTG84vLafuXVzbBDyv/qolSZIGSxvLqWOlNwDsTmdQd/U4/TxmObV43+6hiNgjM382cj0ilgPLAWbtOa+/6iVJkgZAG4O4OtMbqswGHixfyMyVwEqA2fMPypqeI0mS1JrGl1OLI0BmRcTIQO7zwB9HxO4AEbEgIn61+H1tkebQk2JZdWtmPlx33ZIkSYOkrd2ptaQ3VDgKuHysLxi7JUmShkFbg7gpSW8ATgDeXmulkiRJA6iVI0amIr2h2PW6JjO/U0eNkiRJg6y1dIPMXFVzfw8B59bZpyRJ0qBqZCZurJitiDi7iM0a6/4zIiIj4sDStVOLa0uKz1dGxJPqr16SJGnwNDUTV0fM1kZgGfDu4vOxwDdL7ecBbwTeM2Ynxm5pihg7JElqUlPvxO2I2YqOFRHxzYi4DPjVHvtYAxxT9PE0OoH3W0vtlwDH11axJEnSAJvyQVx3zBbwGuDXgEXAnwIv7LGre4EfFbtWjwcuLDcW58/NLkVwlWtYHhHrI2L99vu3Te4fIkmSNECamInrjtk6ErggM7dn5o+BL0ygr9V0llRfDVxc0X4H8OTui5m5MjOXZOaSWbvtNYHHSZIkDaYmBnHdMVsAk42+uhQ4CbglM++taJ9TPE+SJGmoTfnGhsy8OyJmRcSczHyQTrD9/46Ic+m8D3cU8G8AEfFe4GuZWTXLRmY+EBF/BXy3uy06cQ/7AZvHqsfEBkmSNAya2tgwErMFnWXQm+nsNv0o8MXS9xYBt4/VUWauzswbKpoOA76SmY/0X64kSdJga+qIkR0xW5mZwCmjfG/XzPxy98XMPKPqy13xWycBH+mvTEmSpOmhkZm4XmK2iu+9oo/HbMrMtX3cL0mSNG00lp2amasyc3tN6Q1bImJD8XNm0fTSiDhoSoqXJEkaMG1kp9aR3vCBzDyr69pHgbfROXtuVGMlNnjiviRJmi7aGMSdCJwAO3aUfgh4CfADIPro9xrg7IjYxc0NkiRp2DW2nAq1pjecWlpOfQVAZj4KfA84tN6qJUmSBk/TM3GjpjcAP46IXtMbqpZT4ZeJDdeXL0bEcmA5wKw95020ZkmSpIHT6Ewc9aY3VKlMbDB2S5IkDZtGZ+LqTG8YxcHATWN9wcQGSZI0DJqeiYMa0xvKImJf4IHMvK2mOiVJkgZWG7tTpyS9gc6O14/VUqEkSdKAa3wmbgrTG+4BzplsXZIkSdNJGzNxZOaqKejzk3X3KUmSNKgam4kbK26rh3v/KCIyIl5auvaa4tqxxefVxm5JkqSZosmZuH7jtjYCxwMjIffLgK+X2vuO3eqF0VySJGkQNPlO3InAf4x8iIi3RcTGiPh6KcR+LNcAh0fErhGxO3AgsKGr/WUR0coSsSRJUpMaGfB0x21FxP8EXg08PzPvj4hf6aGbBK4EXgHsBVwCPHVHY+ajETESu2VigyRJGmpNzcR1x229DPhkZt4PkJk/7bGf1XSWUZcBF1S0j8Ru7cTEBkmSNGyaWnrsjtsKJhG3lZlfi4hD6Bzq+92I6P5KZeyWJEnSsGlkEFcRt/WfwN9GxL+NLKdm5k8j4pTi+yvG6O7twIOjtBm7JUmSZoQmNzbsiNvKzM/ReadtfURsAN5SfOcZwF1jdZKZV2TmVd3Xjd2SJEkzSXSSrxp4UMRzgNMy86QxvvNZ4LWZ+dAk+j8VuDcz/2Ws7y1ZsiTXr18/0e4lSZIaFxHXZ+aSqrbGjuPIzBsj4qqImDXaWXGZeXQfj7gHOK+P+yVJkqaNRrNTM3NVZm6vIb1ha0RsKH7OLZp+HTiy3oolSZIGU1sH4/ab3nBhZp7Sde1DwMeBL4x148Yt2yb5SEmSpMHR6ExcSb/pDY+RmT8E9o6I/eoqUpIkaVA1PogbJ73hUOAfeujmuNJy6utL128Ajqi5ZEmSpIHTxnJqHekNVcupMEpig7FbkiRp2LSxnFpLesMoKhMbjN2SJEnDpvFBXGbeDcyKiJGB3H8CfxwRuwFExK8U/3nKSILDBBwMbBrrC4sWOIiTJEnTX1sbG2pJbyiLiF2BAwFP8pUkSUOvrUHcCuDkkQ+ZeWZmPiszF2fm/ykuLwQ+3X1jZp49yvtwRwMXZeYjU1GwJEnSIGllEJeZNwJXjXXYb2YePcH4rV2Af+y7OEmSpGmgrcN+ycxVNff373X2J0mSNMgam4krR21FxNIi7H4i958dEfdHxB6lax+MiIyIfSLi8RFxdUS0NjCVJElqSpMDnh1RWxEx2T6+BxwD/GtEPA44CtgCkJkPRcRa4Djg/NE62LhlGwtPv2zCD9585isnVbAkSdJUaPKduJ2itoA9I+LiiPhmRPxzMSgbzwV0BmkAS4EvAeWNDGuK50iSJA21RgZx3VFbhcOBNwOLgKcDr+2hq5uBeRHxJOB4YHVX+ybgeRXPXx4R6yNi/fb7t03iXyBJkjRYmpqJ647aAvhaZn4/M7fTmWF7UY99fQZYBjwfuKbcUPT1UPm9ueK6iQ2SJGmoNPVOXHfUFjw2aqvX6K3VdILuz8nMRyver5sNPDjhCiVJkqaRRgZxmXl3sSt1TmaODLAOj4inAj+k857bSoCIOBdYkZlfG6WvWyLir4Eru9siYm9ga2Y+PFotixbsxXo3KUiSpGmuyY0NO6K2Cl8GzqTzHtsPgIuL688Gbhuro8z8WGb+d0XTUcDl/ZcqSZI02Jo8YmQFcBpwZWauA9Z1fyEi9gRuzswfdbdl5h9VdZqZC0sfTwDe3n+pkiRJg62xmbgeo7buzczfn0z/xQ7YNZn5ncnWKEmSNF00mp1aRG09vobkhh9ExIbi5y+KpsuBS2svWpIkaQC1EVFVR3LDWzPzoq5r5wFvBN4z1o0bt3hOnCRJmv4anYkr1JHcUOUSOgcAS5IkDb1GB3E1Jje8r7Scugg6x5gAs4tjRiRJkoZa0zNxdSU3vDUzFxc/G0vX7wCe3P1lY7ckSdKwaXoQV2dyQ5U5xTN27tDYLUmSNGSa3p16NzArIsoDucMj4qnFu3DHAddCJ7khIg7vte/o7JLYD9g81vcWLXAQJ0mSpr82NjbUltzQ5TDgK5n5SB1FSpIkDbI2jhiZkuQG4CTgI7VVKUmSNMAan4mbwuSGTZm5tr/qJEmSpoc2ZuJGkhvq7vPjdfcpSZI0qBqbiYuIuSNxW5O8f11E3BKlmIeIWBMR9xW/z4uIz9VVryRJ0iBrciZuR9xWH33cAxwBXBsRTwTmjzRk5taIuC0ijsjML43WwcYt21h4+mV9lNCx+cxX9t2HJEnSZDX5TtyOuK2I2D0i1kbEDRGxMSKO6bGP1cCy4vfXAp/pal9TPEeSJGmoNTKIq4jbehB4TWY+FzgK+MfyMukY1gJHFkuyy4ALu9rXAy+ueL6JDZIkaag0NRPXHbcVwP+NiG8AVwILgH176Gc7ncOAjwPmdmWwwiixWyY2SJKkYdPUO3HdcVsnAvOAwzLz4YjYzGPjuEazms6BwGdUtFXGbkmSJA2bRgZxmXl3RMyKiDmZ+SCwF3BHMYA7CnjKyHcjYi3wuszcMkp31wDvBS6oaDuYTvLDqBYt2Iv1bkqQJEnTXJMbG8pxW+cDSyJiPZ1ZuW8DFPmpBwI/Ha2T7DgrM++saD4K6H/rqSRJ0oBr8oiRctzWncBvdH8hIg4BPp2Zj1kSzcylVZ1m5u6lj68Cet3pKkmSNG01NhPXY9zWpsw8bTL9R8Q84P2Zefdka5QkSZouGs1OzcxVmbm9pvSG70TEhuLnWGAbcFpEtBIlJkmS1KS2Bjx1pDecmJnryxeKTRHH0XnnrlJdiQ2SJGnmGoTkpkZn4krqSG+osgYTGyRJ0gzQ+EzcGOkN90bEPsBXIuKSzMxxujo/IkY2QLw0M++ic7zI86akcEmSpAHSxnLqaOkNRwKP8sv0htvH6ecxy6nF+3YPRcQemfmzHQ+IWA4sB5i157z+/wWSJEkta2M5daz0hsXAT+g9vaHKbDqzezsYuyVJkoZN4zNxNac37CQi9ga2ZubDo33HxAZJkjQM2trYUEt6Q4WjgMtrrFOSJGkgtXXEyJSkNwAnAG+vsU5JkqSBFONvAp2iB0f8MXBOn2fFlft7PLAsM88d53s/A75TxzPVk32Aqpxb1c+/dbP8ezfHv3Wz/Hs3p5e/9VMys3JXZmuDuLZExPrMXNJ2HTOFf+/m+Lduln/v5vi3bpZ/7+b0+7du6504SZIk9cFBnCRJ0jQ0EwdxK9suYIbx790c/9bN8u/dHP/WzfLv3Zy+/tYz7p04SZKkYTATZ+IkSZKmvRk1iIuI346I70TE9yLi9LbrGWYRsSoi7oiITW3XMuwi4n9ExFUR8a2IuCki/rLtmoZVRMyJiK9FxNeLv/U72q5pJihSfm6MiM+2Xcuwi4jNEbExIjYUh/BrikTEEyPiooj4dvH/vx9zZu64fcyU5dSImAV8F3g5cCtwHXB8Zn6z1cKGVEQcCdwHnJuZh7RdzzCLiPnA/My8ISL2AK4HXu3/bdcvIgJ4QmbeFxG7AtcCf5mZX2m5tKEWEacBS4A9M/PotusZZhGxGVhSHMSvKRQR5wDXZOYnirNud8vMeybSx0yaiTsc+F5mfj8zHwJWA8e0XNPQysyrmVhkmiYpM2/LzBuK338GfAtY0G5Vwyk77is+7lr8zIz/JdySiNgfeCXwibZrkeoSEXsCRwL/ApCZD010AAczaxC3APhR6fOt+F90GjIRsRB4DvDVlksZWsXS3gbgDuD/ZaZ/66n1T8DbgEdbrmOmSOA/I+L6iFjedjFD7GnAVuCTxasCn4iIJ0y0k5k0iIuKa/4vaA2NiNgd+DTwpsy8t+16hlVmbs/MxcD+wOFFzrOmQEQcDdyRmde3XcsMckRmPhf4n8CfFa/GqH67AM8FPpqZzwF+Dkz4Xf2ZNIi7Ffgfpc/7Az9uqRapVsX7WZ8Gzs/Mz7Rdz0xQLH2sA3673UqG2hHAq4r3tFYDL4mIf223pOGWmT8u/vMO4GI6ryKpfrcCt5Zm8i+iM6ibkJk0iLsOOCginlq8QLgMuKTlmqS+FS/b/wvwrcx8f9v1DLOImBcRTyx+nwu8DPh2q0UNscx8e2bun5kL6fz/7C9k5h+2XNbQiognFJujKJb2fgvwhIEpkJm3Az+KiF8rLr0UmPBmtF1qrWqAZeYjEXEK8HlgFrAqM29quayhFREXAEuBfSLiVuDvMvNf2q1qaB0BnARsLN7VAvg/mXl5eyUNrfnAOcVu98cBn8pMj73QsNgXuLjzvwvZBfi3zPxcuyUNtT8Hzi8mlr4PvH6iHcyYI0YkSZKGyUxaTpUkSRoaDuIkSZKmIQdxkiRJ05CDOEmSpGnIQZwkSdIUiIhVEXFHRIx7VEtEfCAiNhQ/342Ie8a9x92pkiRJ9SsSL+4Dzs3MntNdIuLPgedk5h+P9T1n4iRJkqZAZl4N/LR8LSKeHhGfK/Jpr4mIZ1TcejxwwXj9z5jDfiVJkgbASuANmXlzRDwf+AjwkpHGiHgK8FTgC+N15CBOkiSpARGxO/BC4N+LZAyA2V1fWwZclJnbx+vPQZwkSVIzHgfck5mLx/jOMuDPeu1MkiRJUywz7wV+EBG/DxAdh460R8SvAU8CvtxLfw7iJEmSpkBEXEBnQPZrEXFrRPwJcCLwJxHxdeAm4JjSLccDq7PHo0M8YkSSJGkaciZOkiRpGnIQJ0mSNA05iJMkSZqGHMRJkiRNQw7iJEmSpiEHcZIkSdOQgzhJkqRpyEGcJEnSNPT/A61DkhA4+Nt9AAAAAElFTkSuQmCC\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# We use the figsize option to make the plot larger\n", "letter_dist.plot.barh(figsize=(10, 10))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Although this plot shows the distribution of letters and sexes, the male and female bars are difficult to tell apart. By looking at the `pandas` docs on plotting ([link](https://pandas.pydata.org/pandas-docs/stable/visualization.html)) we learn that `pandas` plots one group of bars for row column in the DataFrame, showing one differently colored bar for each column. This means that a pivoted version of the `letter_dist` table will have the right format." ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
SexFM
Last
a580794861931630
b173761435939
c302621672407
d75423316412640
e3742161614730974
\n", "
" ], "text/plain": [ "Sex F M\n", "Last \n", "a 58079486 1931630\n", "b 17376 1435939\n", "c 30262 1672407\n", "d 754233 16412640\n", "e 37421616 14730974" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "letter_pivot = pd.pivot_table(\n", " baby, index='Last', columns='Sex', values='Count', aggfunc='sum'\n", ")\n", "letter_pivot.head()" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "scrolled": false }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAlsAAAJMCAYAAADNFmNSAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8vihELAAAACXBIWXMAAAsTAAALEwEAmpwYAAAkLUlEQVR4nO3df7BnZ10n+PfHTjadQHJdkuts6LbtoBARmgnDVUREIwqCQUfWmYHoqJBZb7EggXUoCwdn9zIDNbGGlZ0ZGd0GzMCCiQtOlIEtkeVnFAS60yEkhsiUdCbZZocQSEOQhpB89o9c2DY2yU26n3O+ffv1qurK98f5ns+nTqWSdz/Pc55T3R0AAMb4lrkbAADYzIQtAICBhC0AgIGELQCAgYQtAICBhC0AgIFOmruBb+ass87qnTt3zt0GAMB92rt372e7e/lI3y1s2Nq5c2f27NkzdxsAAPepqm78Zt+ZRgQAGEjYAgAYSNgCABhoYdds5cC+uTsAAAa74447cvPNN+fQoUNzt7IhW7duzfbt23PyySdv+DeLG7YAgE3v5ptvzumnn56dO3emquZu5151d2699dbcfPPNOeecczb8O9OIAMBsDh06lDPPPHPhg1aSVFXOPPPM+z0KJ2wBALM6HoLW1z2QXicLW1X1vKq6ev3Pp6rqvVPVBgA2n1e+8pV51KMelcc85jE577zz8uEPf3julo5osjVb3f07SX6nqk5O8p4kvzlVbQBgc/nQhz6Ut7/97bnqqqtyyimn5LOf/Wy++tWvzt3WEc0xjfhvkrynu//TPb+oqtWq2lNVe67+0pkztAYAHA8+/elP56yzzsopp5ySJDnrrLPy0Ic+NHv37s0P//AP53GPe1x+/Md/PJ/+9Kdz8ODBnHvuubnhhhuSJBdeeGFe+9rXTtbrpGGrqp6T5DuSvPxI33f37u5e6e6VLactTdkaAHAceepTn5qbbropj3jEI/L85z8/73//+3PHHXfkhS98Yd761rdm7969ueiii/Kyl70sS0tL+a3f+q085znPyeWXX57Pf/7z+aVf+qXJep1sGrGqHpfkJUme1N13TVUXANh8HvzgB2fv3r258sor8973vjfPetaz8uu//uu59tpr85SnPCVJcuedd+bss89OkjzlKU/JW97ylrzgBS/Ixz72sUl7nXKfrV9O8pAk711fyb+nu/+HCesDAJvIli1bcv755+f888/Prl278prXvCaPetSj8qEPfehvHXvXXXfl+uuvz6mnnprPfe5z2b59+2R9TjaN2N3P7e6Hdvd5638ELQDgAbnhhhvyyU9+8hvvr7766jzykY/MLbfc8o2wdccdd+S6665Lkrz61a/OIx/5yFx22WW56KKLcscdd0zW68LuIL9rmzVbAMCR3X777XnhC1+Y2267LSeddFK+67u+K7t3787q6mouvvjiHDx4MF/72tfy4he/OCeffHJe97rX5SMf+UhOP/30/NAP/VBe8YpX5OUvP+IS8mOuunuSQvfXyspK79mzZ+42AICBrr/++jzykY+cu4375Ug9V9Xe7l450vF2kAcAGEjYAgAYSNgCABhI2AIAGEjYAgAYSNgCABhoYffZAgCYwpYtW7Jr165vvP/DP/zD7Ny585idX9gCABbGzpe+45ieb/8lF9znMaeeemquvvrqY1r3cIsbtg7sS9bsIs+CWzs4dwcALLjFDVsAABP48pe/nPPOOy9Jcs455+SKK644pucXtgCAE9roaUR3IwIADDRJ2Kqqf1lVLzrs/Sur6uIpagMAzGmqka3XJ/nFJKmqb0ny7CRvnqg2AMBsJlmz1d37q+rWqnpskr+TZF9333rP46pqNclqkmw5Yzk7D106RXvwwB3jW5QX0UZumwY4Vub4b87tt98+9PxTLpB/XZLnJPnvkvzukQ7o7t1JdifJKWc/vCfrDABgkCkXyF+R5GlJvjfJOyesCwAwm8lGtrr7q1X13iS3dfedU9UFAJjTZGFrfWH89yf5h1PVBACY2yRhq6q+J8nbk1zR3Z/cyG92bVvKHgtzAYDj3FR3I/5FkodNUQsAYJHYQR4AOKFVVX7+53/+G++/9rWvZXl5Oc94xjOOyfk9GxEAWBxrS8f4fAfv85AHPehBufbaa/PlL385p556at71rndl27Ztx6wFI1sAwAnv6U9/et7xjrs3qr7sssty4YUXHrNzC1sAwAnv2c9+di6//PIcOnQo11xzTR7/+Mcfs3MLWwDACe8xj3lM9u/fn8suuyw/8RM/cUzPbc0WAECSn/qpn8pLXvKSvO9978utt/6tRzg/YMIWAECSiy66KEtLS9m1a1fe9773HbPzmkYEAEiyffv2vOhFLzrm513cka0D+458++cGbuEEAI5TM/x//vbbb/9b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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "letter_pivot.plot.barh(figsize=(10, 10))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Notice that `pandas` conveniently generates a legend for us as well. However, this is still difficult to interpret. We plot the counts for each letter and sex which causes some bars to appear very long and others to be almost invisible. We should instead plot the proportion of male and female babies within each last letter." ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
SexFMF propM prop
Last
a5807948619316300.9678120.032188
b1737614359390.0119560.988044
c3026216724070.0177730.982227
d754233164126400.0439350.956065
e37421616147309740.7175410.282459
\n", "
" ], "text/plain": [ "Sex F M F prop M prop\n", "Last \n", "a 58079486 1931630 0.967812 0.032188\n", "b 17376 1435939 0.011956 0.988044\n", "c 30262 1672407 0.017773 0.982227\n", "d 754233 16412640 0.043935 0.956065\n", "e 37421616 14730974 0.717541 0.282459" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "total_for_each_letter = letter_pivot['F'] + letter_pivot['M']\n", "\n", "letter_pivot['F prop'] = letter_pivot['F'] / total_for_each_letter\n", "letter_pivot['M prop'] = letter_pivot['M'] / total_for_each_letter\n", "letter_pivot.head()" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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+cxnsmPHjrzlLW/Jxz72sWzcuDHnnHNO3vGOd2R6ejrvfe97c/bZZ+ejH/1ovva1r0100EomeGYLADgwHHbYYdm4cWOuvvrqfPrTn87rXve6/Oqv/mq2bNmSl7/85UmSBx54IM94xs7l3i9/+cvzh3/4h/nlX/7l3HjjjWO2vijCFgAwuqmpqZx++uk5/fTTs3r16vze7/1envvc5+baa699xNgHH3wwt9xyS5YtW5a77747Rx111AgdL57TiADAqG699db81V/91UPPN2/enOOOOy5f/epXHwpbO3bsyM0335wk+Z3f+Z0cd9xx+chHPpJzzjknO3bsGKXvxTKzBQCM6p577slb3vKWfP3rX89Tn/rU/MAP/EDWrVuXubm5nHfeedm2bVvuv//+vO1tb8tBBx2UD3zgA7n++utz+OGH57TTTstv/MZv5F3vetfYf4xHVa1N5kbts7OzbcOGDWO3AQAHrFtuuSXHHXfc2G1MnD39vVTVxtba7J7GO40IANCRsAUA0JGwBQDQ0eQukN+6KZmfHrsLdje/bewOAGDJGWVmq6o+O0ZdAIChjRK2Wms/NEZdAIChjXIasaruaa0dNkZtAGDpmJqayurVqx96ftlll2VmZma8hp6AyV2zBQBMlJkLrtin329h7Zq9jlm2bFk2b978pGs98MADmZqaetLf54mYqLBVVXNJ5pJkasXKzGxfP3JHfJt9/EMGsD9bTJDgybvyyivzzne+M0cccURuvfXWnHbaabnooovylKc8JYcddljOP//8fPKTn8x73vOeXH/99fngBz+YJHnTm96Ut73tbVlYWMgZZ5yRF77whdm0aVOe/exn58Mf/nCWL1++z3qcqK0fWmvrWmuzrbXZqeWuRASAA919992XE088MSeeeGLOPPPMPY65/vrr8573vCdf+MIX8jd/8zf5+Mc/niS59957c/zxx+e6667LsmXLsn79+lx33XX53Oc+l/e///3ZtGlTkp33Zpybm8tNN92UFStW5KKLLtqnf4aJClsAALv71mnEzZs359JLL93jmFNOOSXHHHNMpqamctZZZ+Waa65JsnO912te85okyTXXXJMzzzwzhx56aA477LC8+tWvztVXX50k+d7v/d685CUvSZL83M/93EOf31eELQBgSauqPT4/5JBDHlqn9Vj3gn60z+8rY2394EpEAGCfuP7663PbbbflwQcfzCWXXJJTTz31EWNOO+20XHbZZfnGN76Re++9N5deemle+tKXJkm+/OUv59prr02SfOQjH9nj558MM1sAwJL24he/OBdccEGOP/74HH300Xtc2/WCF7wgZ599dk455ZS88IUvzJve9KY8//nPT5Icd9xx+dCHPpQTTjghd999d37pl35pn/Y3UVcj7m71qulscCUHAEyMMa6wvOeee/Y6Zvny5bnkkkv2+tnzzz8/559//iPGPeUpT8n73ve+J97kXpjZAgDoaGJntgAA9ub000/P6aef/oQ/PzMzky1btuy7hvbAzBYAQEfCFgBAR8IWAEBHwhYAQEfCFgAwsaoqb3jDGx56fv/992flypV51ateNWJXj4+rEQGAxZmf3sffb9tehxx66KHZsmVL7rvvvixbtiyf+tSnsmrVqidcsrWW1lqe8pTh5pvMbAEAE+0Vr3hFrrjiiiQ7b6dz1lln7XHcxRdfnJ/6qZ/KGWeckWOPPTbvete7kiQLCws57rjjcu655+YFL3hBbr/99vzKr/xKjj/++KxevfqhDVGvvPLKnHbaaTnzzDPznOc8J29+85vz4IMPPun+J3dma+umJ5+gF5GYAYDJ9vrXvz6/9mu/lle96lW56aabcs455+Tqq6/e49jrr78+W7ZsyfLly3PyySdnzZo1OfLII3Prrbdm/fr1ueiii/JHf/RH2bx5c2688cbceeedOfnkk3Paaac99PkvfvGLeeYzn5kzzjgjH//4x/Pa1772SfVvZgsAmGgnnHBCFhYW8pGPfCSvfOUrH3Psy1/+8hxxxBFZtmxZXv3qV+eaa65Jkjzzmc/Mi170oiTJNddck7POOitTU1N5+tOfnh/+4R/O5z//+STJKaeckmOOOSZTU1M566yzHvr8kzG5M1sAALv85E/+ZN7+9rfnyiuvzF133fWo46pqj88PPfTQh15rrT3uzz8Zg81sVdVlVbWxqm6uqrmh6gIAS98555yTd77znVm9evVjjvvUpz6Vu+++O/fdd18uu+yyvOQlL3nEmNNOOy2XXHJJHnjggXz1q1/NVVddlVNOOSXJztOIt912Wx588MFccsklOfXUU59070OeRjyntXZSktkk51XVEQPWBgCWsKOOOipvfetb9zru1FNPzRve8IaceOKJec1rXpPZ2dlHjDnzzDNzwgkn5HnPe15e9rKX5bd+67fy3d/93UmSF7/4xbngggty/PHH5+ijj86ZZ575pHuvx5pK25eqaj7JtzqeSfJPW2ufe9iYuSRzSTK1YuVJR/3S+kF6AwAe6f0/+Yw8/fuOGbuNJMkJR33nXsdcfPHF2bBhQ9773vc+oRpXXnllLrzwwnziE594zHG33HJLjjvuuG97rao2ttYemewy0MxWVZ2e5MeSvLi19rwkm5Ic8vBxrbV1rbXZ1trs1PJ9vJcHAMAIhlogP53ka621b1TVDyZ50UB1AYADxNlnn52zzz77CX/+9NNPz+mnn77P+vmWodZs/fckT62qm5L8epLP7WU8AMB+YZCZrdbaPyZ5xRC1AIB9o2XnrW32xfYH+4snstbdpqYAwB596es7cv83/v4JBYz9UWstd911Vw455BHLzh/TYFcjPl6zs7Ntw4YNY7cBAAesHTt25I477sj27dvHbmViHHLIITnqqKNy0EEHfdvrj3U1oh3kAYA9Ouigg3L00UeP3caS5zQiAEBHwhYAQEfCFgBARxO7QL6q/iHJrWP3waIcmeTOsZtgURyrpcOxWjocq6Wj57F6Zmtt5Z7emOQF8rc+2qp+JktVbXCslgbHaulwrJYOx2rpGOtYOY0IANCRsAUA0NEkh611YzfAojlWS4djtXQ4VkuHY7V0jHKsJnaBPADA/mCSZ7YAAJa8UcNWVZ1RVbdW1V9X1QV7eL+q6nd3vX9TVb1gjD5Z1LH62V3H6Kaq+mxVPW+MPtn7sdpt3MlV9UBVvXbI/vhfFnOsqur0qtpcVTdX1WeG7pGdFvFv4HRV/UlV3bjrWL1xjD5JquqDVfV3VbXlUd4fPlu01kb5SjKV5G+SHJPkO5LcmOQ5DxvzyiT/T5JK8qIk143V74H8tchj9UNJ/smux69wrCb3WO027s+T/N9JXjt23wfi1yJ/rr4zyReTfN+u5981dt8H4tcij9W/TfKbux6vTHJ3ku8Yu/cD8SvJaUlekGTLo7w/eLYYc2brlCR/3Vr729baN5N8NMlPPWzMTyX5cNvpc0m+s6qeMXSj7P1YtdY+21r72q6nn0ty1MA9stNifq6S5C1J/ijJ3w3ZHN9mMcfqZ5J8vLX25SRprTle41jMsWpJDq+qSnJYdoat+4dtkyRprV2VnX//j2bwbDFm2FqV5Pbdnt+x67XHO4b+Hu9x+N+y87cGhrfXY1VVq5KcmeR9A/bFIy3m5+rZSf5JVV1ZVRur6ucH647dLeZYvTfJcUm2JvlCkre21h4cpj0ep8GzxZg7yNceXnv4pZGLGUN/iz4OVfUj2Rm2Tu3aEY9mMcfq/0zyr1trD+z8JZyRLOZYPTXJSUl+NMmyJNdW1edaa/+jd3N8m8Ucq3+aZHOSlyX5/iSfqqqrW2t/37k3Hr/Bs8WYYeuOJN+72/OjsvM3gsc7hv4WdRyq6oQkH0jyitbaXQP1xrdbzLGaTfLRXUHryCSvrKr7W2uXDdIh37LYfwPvbK3dm+TeqroqyfOSCFvDWsyxemOStW3noqC/rqrbkvxgkuuHaZHHYfBsMeZpxM8neVZVHV1V35Hk9Ukuf9iYy5P8/K4rB16UZFtr7StDN8rej1VVfV+Sjyd5g9+6R7XXY9VaO7q1NtNam0nysSTnClqjWMy/gX+c5KVV9dSqWp7khUluGbhPFnesvpydM5CpqqcnOTbJ3w7aJYs1eLYYbWartXZ/Vf2LJJ/Mzis9Pthau7mq3rzr/fdl55VSr0zy10m+kZ2/OTCwRR6rdyY5IslFu2ZM7m9uzDq4RR4rJsBijlVr7Zaq+u9JbkryYJIPtNb2eDk7/Szy5+rXk1xcVV/IztNU/7q1dudoTR/AquojSU5PcmRV3ZHk/0hyUDJetrCDPABAR3aQBwDoSNgCAOhI2AIA6EjYAgDoSNgCAOhI2AIA6EjYAgDoSNgCAOjo/wdbgZ4LAz61swAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "(letter_pivot[['F prop', 'M prop']]\n", " .sort_values('M prop') # Sorting orders the plotted bars\n", " .plot.barh(figsize=(10, 10))\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Summary\n", "
\n", "\n", "We can see that almost all first names that end in 'p' are male and names that end in 'a' are female! In general, the difference between bar lengths for many letters implies that we can often make a good guess to a person's sex if we just know the last letter of their first name.\n", "\n", "We've learned to express the following operations in `pandas`:\n", "\n", "| Operation | `pandas` |\n", "| --------- | ------- |\n", "| Applying a function elementwise | `series.apply(func)` |\n", "| String manipulation | `series.str.func()` |\n", "| Plotting | `df.plot.func()` |" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.5" }, "toc": { "nav_menu": {}, "number_sections": false, "sideBar": true, "skip_h1_title": false, "title_cell": "Table of Contents", "title_sidebar": "Contents", "toc_cell": true, "toc_position": {}, "toc_section_display": true, "toc_window_display": false } }, "nbformat": 4, "nbformat_minor": 2 }